import PowerUp from './PowerUp.js'
import { playSound } from '../utils/helpers.js'

// 清屏炸弹道具类
export default class BombPowerUp extends PowerUp {
  constructor(x, y) {
    super(x, y, 'bomb')
    this.rotationSpeed = 0.1 // 快速旋转
    this.scaleDirection = 0.015 // 明显的脉动
    this.glowDirection = 0.02 // 更快的光晕变化
  }

  loadImage() {
    // 加载清屏炸弹道具图像
    this.image.src =
      ''
  }

  // 获取光晕颜色
  getGlowColor() {
    return `rgba(255, 50, 0, ${this.glowOpacity})`
  }

  apply(player, game) {
    super.apply(player, game)

    // 清除所有敌机并增加分数
    let totalScore = 0

    // 为每个敌机创建爆炸效果并增加分数
    for (const enemy of game.enemies) {
      // 创建爆炸效果
      game.createExplosion(
        enemy.x + enemy.width / 2,
        enemy.y + enemy.height / 2,
        enemy.type
      )

      // 增加分数
      totalScore += enemy.score
    }

    // 清空敌机数组
    game.enemies = []

    // 增加总分数
    game.score += totalScore

    // 更新UI
    game.updateUI()

    // 显示提示信息
    game.showMessage('炸弹清除了所有敌机！', 2000)

    // 播放爆炸音效
    playSound('explosion')

    // 添加全屏爆炸效果
    this.addScreenExplosionEffect(game)
  }

  // 添加全屏爆炸效果
  addScreenExplosionEffect(game) {
    // 创建一个白色闪光效果
    const flash = {
      opacity: 0.8,
      update: function () {
        this.opacity -= 0.05
        return this.opacity > 0
      },
      render: function (ctx) {
        ctx.fillStyle = `rgba(255, 255, 255, ${this.opacity})`
        ctx.fillRect(0, 0, game.canvas.width, game.canvas.height)
      },
    }

    // 添加到游戏特效中
    game.addSpecialEffect(flash)

    // 创建多个爆炸波纹
    for (let i = 0; i < 3; i++) {
      setTimeout(() => {
        const wave = {
          x: game.canvas.width / 2,
          y: game.canvas.height / 2,
          radius: 0,
          maxRadius: Math.max(game.canvas.width, game.canvas.height),
          opacity: 0.7,
          update: function () {
            this.radius += 15
            this.opacity -= 0.01
            return this.opacity > 0 && this.radius < this.maxRadius
          },
          render: function (ctx) {
            ctx.beginPath()
            ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2)
            ctx.strokeStyle = `rgba(255, 100, 0, ${this.opacity})`
            ctx.lineWidth = 8
            ctx.stroke()
          },
        }

        // 添加到游戏特效中
        game.addSpecialEffect(wave)
      }, i * 200) // 每200毫秒添加一个波纹
    }
  }
}
